// 导入Vue
import Vue from 'vue'
// 导入Vuex
import Vuex from 'vuex'
// 安装vuex
Vue.use(Vuex)

// 导入封装的操作的工具函数
import { saveToken, getToken, removeToken } from '../utils/token';

// 导入接口
import { userInfoAPI } from "@/api";

// 导入router
import router from '@/router'
// 导入toast
import { Toast } from 'vant'

// 实例化Vuex
const store = new Vuex.Store({

  state: {
    // 专门用来保存token的数据
    // 如果本地存储有值就拿本地存储的值
    // 如果没值，就给空对象
    tokenObj: getToken() || {},

    // 声明userInfo来保存用户资料
    // 只有null、undefined、0、空字符串、NaN是false,其他都是true
    userInfo: {}
  },

  mutations: {

    // 设置token
    setToken(state, tokenObj) {

      state.tokenObj = tokenObj
      // 也保存到本地存储
      saveToken(tokenObj)
    },

    // 用来修改userInfo的方法
    setUserInfo(state, info) {

      state.userInfo = info
    },

    // 专门做退出方法
    logout (state) {
      // 删除vuex里的token
      state.tokenObj = {}
      // 删除本地存储的token
      removeToken()
      // 还要删除vuex里的用户信息
      state.userInfo = {}
      // 弹出退出成功的提示
      Toast.success('退出成功')
      // 打回到登录页
      router.push('/login')
    }
  },

  actions: {

    // 封装请求用户信息的代码
    async reqUserInfo(context) {

      // 如果vuex里没有数据才发请求
      if (!context.state.userInfo.name) {

        // 发请求获取用户资料
        let res = await userInfoAPI();
        context.commit("setUserInfo", res.data.data);
      }
    }
  }

});

// 暴露这个对象
export default store